﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema id="FileSystemDefinitionSchema" targetNamespace="http://schemas.microsoft.com/dsltools/FileSystemDefinition" elementFormDefault="qualified" xmlns="http://schemas.microsoft.com/dsltools/FileSystemDefinition" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- FileSystemModel -->
  <xsd:element name="fileSystemModel" type="FileSystemModel" />
  <xsd:complexType name="FileSystemModel">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: FileSystemModelHasDirectories -->
      <xsd:element name="directories" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of FileSystemModelHasDirectories</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="fileSystemModelHasDirectories">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from FileSystemModelHasDirectories needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="directoryModel" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- dslVersion -->
    <xsd:attribute name="dslVersion" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Version of the model serialized in this file.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Path -->
    <xsd:attribute name="path" type="xsd:string" />
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" use="required" />
  </xsd:complexType>
  
  <!-- FileSystemModel Moniker -->
  <xsd:element name="fileSystemModelMoniker" type="FileSystemModelMoniker" />
  <xsd:complexType name="FileSystemModelMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FileSystemModel instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- DirectoryModel -->
  <xsd:element name="directoryModel" type="DirectoryModel" />
  <xsd:complexType name="DirectoryModel">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: DirectoryModelHasFiles -->
      <xsd:element name="files" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of DirectoryModelHasFiles</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="directoryModelHasFiles">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from DirectoryModelHasFiles needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="fileModel" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: DirectoryModelHasSubDirectories -->
      <xsd:element name="subDirectories" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of DirectoryModelHasSubDirectories</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="directoryModelHasSubDirectories">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from DirectoryModelHasSubDirectories needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="directoryModel" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: DirectoryModelHasProperties -->
      <xsd:element name="properties" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of DirectoryModelHasProperties</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="directoryModelHasProperties">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from DirectoryModelHasProperties needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="property" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" use="required" />
  </xsd:complexType>
  
  <!-- DirectoryModel Moniker -->
  <xsd:element name="directoryModelMoniker" type="DirectoryModelMoniker" />
  <xsd:complexType name="DirectoryModelMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DirectoryModel instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- FileModel -->
  <xsd:element name="fileModel" type="FileModel" />
  <xsd:complexType name="FileModel">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: FileModelHasProperties -->
      <xsd:element name="properties" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of FileModelHasProperties</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="fileModelHasProperties">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from FileModelHasProperties needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="property" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" use="required" />
    <!-- Property: ReadOnly -->
    <xsd:attribute name="readOnly" type="xsd:boolean" />
    <!-- Property: Hidden -->
    <xsd:attribute name="hidden" type="xsd:boolean" />
    <!-- Property: System -->
    <xsd:attribute name="system" type="xsd:boolean" />
    <!-- Property: FileVersion -->
    <xsd:attribute name="fileVersion" type="xsd:string" />
  </xsd:complexType>
  
  <!-- FileModel Moniker -->
  <xsd:element name="fileModelMoniker" type="FileModelMoniker" />
  <xsd:complexType name="FileModelMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FileModel instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- AssemblyFileModel -->
  <xsd:element name="assemblyFileModel" type="AssemblyFileModel" substitutionGroup="fileModel" />
  <xsd:complexType name="AssemblyFileModel">
    <xsd:complexContent>
      <xsd:extension base="FileModel">
        <!-- Property: SelfReg -->
        <xsd:attribute name="selfReg" type="xsd:boolean" />
        <!-- Property: AssemblyName -->
        <xsd:attribute name="assemblyName" type="xsd:string" />
        <!-- Property: Culture -->
        <xsd:attribute name="culture" type="xsd:string" />
        <!-- Property: PublicKeyToken -->
        <xsd:attribute name="publicKeyToken" type="xsd:string" />
        <!-- Property: AssemblyVersion -->
        <xsd:attribute name="assemblyVersion" type="xsd:string" />
        <!-- Property: ProcessorArchitecture -->
        <xsd:attribute name="processorArchitecture" type="xsd:string" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- AssemblyFileModel Moniker -->
  <xsd:element name="assemblyFileModelMoniker" type="AssemblyFileModelMoniker" substitutionGroup="fileModelMoniker" />
  <xsd:complexType name="AssemblyFileModelMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for AssemblyFileModel instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="FileModelMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Property -->
  <xsd:element name="property" type="Property" />
  <xsd:complexType name="Property">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Property: Value -->
      <xsd:element name="value" type="xsd:string" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" use="required" />
  </xsd:complexType>
  
  <!-- Property Moniker -->
  <xsd:element name="propertyMoniker" type="PropertyMoniker" />
  <xsd:complexType name="PropertyMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Property instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- FileSystemModelHasDirectories -->
  <xsd:element name="fileSystemModelHasDirectories" abstract="true" type="FileSystemModelHasDirectories" />
  <xsd:complexType name="FileSystemModelHasDirectories" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DirectoryModel -->
      <xsd:element ref="directoryModel" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- FileSystemModelHasDirectories Moniker -->
  <xsd:element name="fileSystemModelHasDirectoriesMoniker" abstract="true" type="FileSystemModelHasDirectoriesMoniker" />
  <xsd:complexType name="FileSystemModelHasDirectoriesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FileSystemModelHasDirectories instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DirectoryModelHasFiles -->
  <xsd:element name="directoryModelHasFiles" abstract="true" type="DirectoryModelHasFiles" />
  <xsd:complexType name="DirectoryModelHasFiles" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end FileModel -->
      <xsd:element ref="fileModel" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- DirectoryModelHasFiles Moniker -->
  <xsd:element name="directoryModelHasFilesMoniker" abstract="true" type="DirectoryModelHasFilesMoniker" />
  <xsd:complexType name="DirectoryModelHasFilesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DirectoryModelHasFiles instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DirectoryModelHasSubDirectories -->
  <xsd:element name="directoryModelHasSubDirectories" abstract="true" type="DirectoryModelHasSubDirectories" />
  <xsd:complexType name="DirectoryModelHasSubDirectories" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DirectoryModel -->
      <xsd:element ref="directoryModel" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- DirectoryModelHasSubDirectories Moniker -->
  <xsd:element name="directoryModelHasSubDirectoriesMoniker" abstract="true" type="DirectoryModelHasSubDirectoriesMoniker" />
  <xsd:complexType name="DirectoryModelHasSubDirectoriesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DirectoryModelHasSubDirectories instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- FileModelHasProperties -->
  <xsd:element name="fileModelHasProperties" abstract="true" type="FileModelHasProperties" />
  <xsd:complexType name="FileModelHasProperties" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Property -->
      <xsd:element ref="property" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- FileModelHasProperties Moniker -->
  <xsd:element name="fileModelHasPropertiesMoniker" abstract="true" type="FileModelHasPropertiesMoniker" />
  <xsd:complexType name="FileModelHasPropertiesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FileModelHasProperties instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DirectoryModelHasProperties -->
  <xsd:element name="directoryModelHasProperties" abstract="true" type="DirectoryModelHasProperties" />
  <xsd:complexType name="DirectoryModelHasProperties" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Property -->
      <xsd:element ref="property" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- DirectoryModelHasProperties Moniker -->
  <xsd:element name="directoryModelHasPropertiesMoniker" abstract="true" type="DirectoryModelHasPropertiesMoniker" />
  <xsd:complexType name="DirectoryModelHasPropertiesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DirectoryModelHasProperties instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
</xsd:schema>

